﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{

    /////// OLD
    /**
     *  Pozíciót tartalmazó osztály. 
     *  area - A pont körüli "hiba" pixelben.
     */
    class QueueElement
    {
        public int x;
        public int y;
        public int color;
        public static int area;

        public QueueElement(int x, int y, int c)
        {
            this.x = x;
            this.y = y;
            this.color = c;
            area = 10;
        }
        public void setArea(int a)
        {
            area = a;
        }
        override public bool Equals(Object o)
        {
            if (o is QueueElement)
            {
                QueueElement temp = (QueueElement)o;
                if (  ( temp.color == this.color) &
                    !(( temp.x >= this.x + area
                     || temp.x <= this.x - area)
                    & ( temp.y >= this.y + area
                     || temp.y <= this.y - area))) return true;
            }
            return false;
        }

    }

    /**
     *  Konténer osztály sor kiterjesztésére.
     */
    public class LastQ<T> : Queue<T>
    {
        public T Last { get; private set; }
        public int queuePosition { get; private set; }
        new public void Enqueue(T item)
        {
             Last = item;
             base.Enqueue(item);
        }
    }
    ///**
    // *   Parancsok "mintáját" tartalmazó osztály.
    // */
    //public class Command
    //{
    //    //int[] actualCommands;
    //    int length;
    //    int noOfSamples;
    //    int[,]sampleCommands;
    //    public Command(int length, int noOfSamples)
    //    {
    //        //actualCommands = new int[length];
    //        this.length = length;
    //        this.noOfSamples = noOfSamples;
    //        sampleCommands = new int[length,noOfSamples];
    //    }
    //}

    class Trials
    {
        //  Írjuk le a "parancsokat" - ha a kép adott részére esik módon.
        //  Nem kipróbált!
        //  FONTOS: Ezek képek, az origó 0,0 a bal felső sarokban!
        int jumpX = 100; // <100
        int crouchX = 200; // >200
        int jumpY = 150; // >150
        int crouchY = 150; // >150

        LastQ<QueueElement> Test = new LastQ<QueueElement>();

        int queuePosition = 0;
        //QueueElement[] queue = new QueueElement[10];


        ///**
        // *  Adott színhez tartozó pozíciót vár.
        // */
        //bool addElement2(int x, int y, int c)
        //{
        //    if (queuePosition != 0)
        //    {
        //        QueueElement temp = new QueueElement(x, y, c);
        //        if (!queue[queuePosition - 1].Equals(temp))
        //        {
        //            queue[queuePosition++] = temp;
        //            return true;
        //        }
        //    }
        //    else
        //    {
        //        queue[queuePosition++] = new QueueElement(x, y, c);
        //        return true;
        //    }
        //    return false;
        //}
        /**
        *  Adott színhez tartozó pozíciót vár.
        */
        bool addElement(int x, int y, int c)
        {
            QueueElement temp = new QueueElement(x, y, c);
            if (Test.Count != 0)
            {

                if (!(Test.Last).Equals(temp))
                {
                    Test.Enqueue(temp);
                    queuePosition++;
                    return true;
                }
            }
            else
            {
                Test.Enqueue(temp);
                queuePosition++;
                return true;
            }
            return false;
        }
        /**
         *  A sor elejéről kiolvassa a pozíciót, és parancsot hív.
         */
        bool readElement()
        {
            if (Test.Count > 0)
            {
                QueueElement temp = Test.Dequeue();

                //  Ha az x koordináta nagyobb, mint alap helyzetben kéne, ugrás metódus hívása.
                //  Analóg módon a többi parancsra is.
                if (temp.x > jumpX & temp.y > jumpY)
                {
                    Console.WriteLine("jump!"); //jump()
                }
                else
                {
                    Console.WriteLine("Nothing");
                }
                return true;
            }
            else
            {
                return false;
            }
        }



        public void Main2()
        {

            //// Teszt...
            //Program p = new Program();
            //Console.WriteLine(p.addElement(10,30,1));
            //Console.WriteLine(p.addElement(3, 60, 1));
            //Console.WriteLine(p.addElement(200, 400, 1));
            //Console.WriteLine(p.queuePosition);
            //for (int i = 0; i < p.queuePosition; i++)
            //{
            //    p.readElement();
            //    //QueueElement temp = p.Test.Dequeue();
            //    //Console.WriteLine(temp.x + " " + temp.y);
            //    //Console.WriteLine(p.queue[i].x + " " + p.queue[i].y);
            //}
            //Console.ReadLine();
        }
    }
}
